package br.com.mauricioreis;

import java.util.List;

import android.app.Activity;
import android.os.Bundle;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.ArrayAdapter;
import android.widget.AutoCompleteTextView;
import android.widget.Button;
import android.widget.EditText;
import android.widget.Toast;
import br.com.mauricioreis.db.Alimento;
import br.com.mauricioreis.db.Medida;
import br.com.mauricioreis.db.MedidaAlimento;
import br.com.mauricioreis.db.Prato;
import br.com.mauricioreis.db.Refeicao;

public class PratoAct extends Activity {
    private AutoCompleteTextView textViewMedida;
    private AutoCompleteTextView textViewAlimento;
    private EditText etQuantidade;
    private Button btCancelar;
    private Button btConfirmar;
    private Refeicao refeicao;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.prato);
        etQuantidade = (EditText) findViewById(R.id.pratoQuantidade);
        Bundle extras = getIntent().getExtras();
        if (extras == null) {
            return;
        }
        // obtem o id da medida
        Integer idRefeicao = extras.getInt("idRefeicao", 0);
        // obtem a medida através do seu ID
        this.refeicao = new Refeicao();
        this.refeicao.setId(idRefeicao);
        this.refeicao = Refeicao.consultar(this, refeicao);

        montaAutoCompleteMedida();
        montaAutoCompleteAlimento();
        montaBotaoCancelar();
        montaBotaoConfirmar();

    }

    private void montaBotaoConfirmar() {
        btConfirmar = (Button) findViewById(R.id.pratoConfirmar);

        btConfirmar.setOnClickListener(new OnClickListener() {
            @Override
            public void onClick(View v) {
                String nomeMedida = PratoAct.this.textViewMedida.getText().toString();
                String nomeAlimento = PratoAct.this.textViewAlimento.getText().toString();
                String quantidade = PratoAct.this.etQuantidade.getText().toString();
                // valida medida, se ela existe
                Medida medidaInclusao = Medida.consultarPorNome(PratoAct.this, nomeMedida);
                if (medidaInclusao == null) {
                    Toast.makeText(PratoAct.this, "Medida inválida", Toast.LENGTH_LONG).show();
                    // seta o foco para o campo da medida
                    textViewMedida.requestFocus();
                    return;
                }

                // valida alimento
                Alimento alimentoInclusao = Alimento.consultarPorNome(PratoAct.this, nomeAlimento);
                if (alimentoInclusao == null) {
                    Toast.makeText(PratoAct.this, "Alimento inválido", Toast.LENGTH_LONG).show();
                    textViewAlimento.requestFocus();
                    return;
                }

                // valida campos obrigatorios
                if (quantidade.isEmpty()) {
                    Toast.makeText(PratoAct.this, "O campo quantidade é obrigatório", Toast.LENGTH_LONG).show();
                    etQuantidade.requestFocus();
                    return;
                }
                // obtem medida alimento
                MedidaAlimento medidaAlimentoInclusao = new MedidaAlimento();
                medidaAlimentoInclusao.setIdAlimento(alimentoInclusao.getId());
                medidaAlimentoInclusao.setIdMedida(medidaInclusao.getId());
                medidaAlimentoInclusao = MedidaAlimento.consultarChaveUnica(PratoAct.this, medidaAlimentoInclusao);
                if (medidaAlimentoInclusao == null) {
                    Toast.makeText(PratoAct.this, "Esta medida não está relacionada com este alimento", Toast.LENGTH_LONG).show();
                    etQuantidade.requestFocus();
                    return;
                }
                Prato prato = new Prato();
                prato.setQuantidade(Float.valueOf(quantidade));
                prato.setIdMedidaAlimento(medidaAlimentoInclusao.getId());
                prato.setIdRefeicao(refeicao.getId());
                Prato.incluir(PratoAct.this, prato);
                finish();
            }
        });

    }

    private void montaBotaoCancelar() {
        btCancelar = (Button) findViewById(R.id.pratoCancelar);
        btCancelar.setOnClickListener(new OnClickListener() {

            @Override
            public void onClick(View arg0) {
                finish();
            }
        });

    }

    private void montaAutoCompleteAlimento() {
        textViewAlimento = (AutoCompleteTextView) findViewById(R.id.autocompleteAlimento);
        List<Alimento> alimentos = Alimento.listar(this, new Alimento());
        ArrayAdapter<Alimento> adapterAlimento = new ArrayAdapter<Alimento>(this, R.layout.list_item, alimentos);
        textViewAlimento.setAdapter(adapterAlimento);
    }

    private void montaAutoCompleteMedida() {
        textViewMedida = (AutoCompleteTextView) findViewById(R.id.autocompleteMedida);
        List<Medida> medidas = Medida.listar(this, new Medida());
        ArrayAdapter<Medida> adapterMedida = new ArrayAdapter<Medida>(this, R.layout.list_item, medidas);
        textViewMedida.setAdapter(adapterMedida);
    }

}
